package miage.rest.routing;

import org.restlet.resource.Finder;
import org.restlet.resource.ServerResource;
import org.restlet.routing.Template;
import org.restlet.routing.TemplateRoute;
import org.restlet.routing.Router;

/**
 * Classe de recherche des URI a partir des resources
 * 
 *
 * @author Schwartz Michaël
 */
public class UriTemplateFinder {
	private final Router router;

	
	public UriTemplateFinder(Router router) {
		this.router = router;
		
	}

	/**
	 * Retourne une route à partir d'une classe de type ServerResource
	 * 
	 * @param resource
	 * @return la route correspondante
	 */
	public TemplateRoute findRoute(Class<? extends ServerResource> resource) {
		TemplateRoute result = null;
		Finder finder;
		for(TemplateRoute route : router.getRoutes()) {
			if (route.getNext() instanceof Finder) {
				finder = (Finder)route.getNext();
				if (finder.getTargetClass().equals(resource)) {
					result = route;
					break;
				}
			}
		}

		return result;
	}

	/**
	 * Retourne un template d'URI à partir d'une classe de type ServerResource
	 *
	 * @param resource
	 * @return le template d'URI correspondant ou null si la route n'a pas été trouvée
	 */
	public Template find(Class<? extends ServerResource> resource) {
		TemplateRoute route = findRoute(resource);
		Template template = null;
		if (route != null) {
			template = route.getTemplate();
		}
		return template;
	}

}
